public class Text {

    //给一个字符串  找出里面长度最长的不含重复字符 的子串
    public int lengthOfLongestSubstring(String s) {
        //把字符串 转换为字符
        char[] c = s.toCharArray();
        //可以用数组模拟哈续表
        int[] hash = new int[128];
        //第一步 得先定义两个指针 和保存 长度的变量
        int left = 0,right = 0,n = s.length(),ret = 0;
        while (right < n) {
            hash[c[right]]++;  //  进入窗口 根据下标来进行++
            //判断 是否重复
            while (hash[c[right]] > 1) //大于1  说明 哈希表中有该元素了
                //出窗口
                hash[c[left++]]--;
                //更新长度
                 ret = Math.max(ret,right - left + 1);
                right++;  //让right继续加加继续判断
        }
        return ret;
    }
    //给一个数组  和一个target的目标值   然后求出 >=target的最短连续子数组  返回其长度   数组里面的元素 都是正整数
    public int minSubArrayLen(int target, int[] nums) {
        int n = nums.length,sum = 0, len = Integer.MAX_VALUE;  //这里要把 len定义成最大值  因为 要比较返回 最短的长度
        for (int left = 0,right = 0;right < n; right++) {
            sum = sum + nums[right];
            while (sum >= target) {
                len = Math.min(len,right - left + 1);  //更新长度
                sum = sum - nums[left];  //减掉 之前 那个值  因为 要把left指针向右移
                left++;
            }
        }
        return len == Integer.MAX_VALUE ? 0 : len;
    }
    public static void main(String[] args) {

    }
}
